package cn.com.oidreams.wechat.robot.entity;

import cn.com.oidreams.common.annotations.Required;
import cn.com.oidreams.wechat.robot.enums.WeXinTalkEnum;
import lombok.Data;

/***
 ** @category 请用一句话描述这个类的用途
 ** @author qing.yunhui
 ** @email: qingyh@glodon.com
 ** @createTime: 2021-12-15 9:57
 **/
@Data
public class TemplateCardMsgRequest extends BaseRequest{

    public TemplateCardMsgRequest(TemplateCard template_card) {
        setMsgtype(WeXinTalkEnum.MSG_TYPE.TEMPLATE_CARD.getCode());
        this.template_card = template_card;
    }

    @Required(errorMsg ="模版卡片的模版类型不能为空",classParse = true,remark = "模版卡片的模版类型，文本通知模版卡片的类型为text_notice")
    private TemplateCard template_card;

    @Data
    public static class TemplateCard{
        public TemplateCard(String card_type, MainTitle main_title, CardAction card_action, Source source, EmphasisContent emphasis_content, QuoteArea quote_area, String sub_title_text, HorizontalContentList horizontal_content_list, JumpList jump_list) {
            this.card_type = card_type;
            this.main_title = main_title;
            this.card_action = card_action;
            this.source = source;
            this.emphasis_content = emphasis_content;
            this.quote_area = quote_area;
            this.sub_title_text = sub_title_text;
            this.horizontal_content_list = horizontal_content_list;
            this.jump_list = jump_list;
        }
        public TemplateCard(String card_type, MainTitle main_title, CardAction card_action) {
            this(card_type,main_title,card_action,null,null,null,null,null,null);
        }
        @Required(errorMsg = "模版卡片的模版类型不能为空!",remark = "模版卡片的模版类型，文本通知模版卡片的类型为text_notice")
        private String card_type;
        @Required(errorMsg = "模版卡片内容必填",classParse = true,remark = "模版卡片的主要内容，包括一级标题和标题辅助信息")
        private MainTitle main_title;
        @Required(errorMsg = "整体卡片的点击跳转事件必填!",classParse = true,remark = "整体卡片的点击跳转事件，text_notice模版卡片中该字段为必填项")
        private CardAction card_action;
        /**
         * <p>卡片来源样式信息，不需要来源样式可不填写</p>
         * */
        private Source source;
        /**
         * <p>关键数据样式(非必填项)</p>
         * */
        private EmphasisContent emphasis_content;
        /**
         * <p>引用文献样式，建议不与关键数据共用(非必填)</p>
         * */
        private QuoteArea quote_area;
        /**
         * <p>二级普通文本，建议不超过112个字。模版卡片主要内容的一级标题main_title.title和二级普通文本sub_title_text必须有一项填写(非必填)</p>
         * */
        private String sub_title_text;
        /**
         * <p>二级标题+文本列表，该字段可为空数组，但有数据的话需确认对应字段是否必填，列表长度不超过6</p>
         * */
        private HorizontalContentList horizontal_content_list;
        /**
         * <p>跳转指引样式的列表，该字段可为空数组，但有数据的话需确认对应字段是否必填，列表长度不超过3</p>
         * */
        private JumpList jump_list;
    }

    @Data
    /**
     * <p>卡片来源样式信息</p>
     * */
    public static class Source{
        /**
         * <p>来源图片的url</p>
         * */
        private String icon_url;
        /**
         * <p>来源图片的描述，建议不超过13个字</p>
         * */
        private String desc;
        /**
         * <p>来源文字的颜色，目前支持：0(默认) 灰色，1 黑色，2 红色，3 绿色</p>
         * */
        private int desc_color;
    }
    @Data
    public static class MainTitle{
        @Required(errorMsg = "标题不能为空!",remark = "一级标题，建议不超过26个字。模版卡片主要内容的一级标题main_title.title和二级普通文本sub_title_text必须有一项填写")
        private String title;
        @Required(errorMsg = "标题辅助信息不能为空!",remark = "标题辅助信息，建议不超过30个字")
        private String desc;
    }
    @Data
    /**
     * <p>关键数据信息</p>
     * */
    public static class EmphasisContent{
        /**
         * <p>关键数据样式的数据内容，建议不超过10个字</p>
         * */
        private String title;
        /**
         * <p>关键数据样式的数据描述内容，建议不超过15个字</p>
         * */
        private String desc;
    }
    @Data
    public static class QuoteArea{
        /**
         * <p>引用文献样式区域点击事件，0或不填代表没有点击事件，1 代表跳转url，2 代表跳转小程序</p>
         * */
        private int type;
        /**
         * <p>点击跳转的url，quote_area.type是1时必填</p>
         * */
        private String url;
        /**
         * <p>点击跳转的小程序的appid，quote_area.type是2时必填</p>
         * */
        private String appid;
        /**
         * <p>点击跳转的小程序的pagepath，quote_area.type是2时选填</p>
         * */
        private String pagepath;
        /**
         * <p>引用文献样式的标题</p>
         * */
        private String title;
        /**
         * <p>引用文献样式的引用文案</p>
         * */
        private String quoteText;
    }
    @Data
    public static class HorizontalContentList{
        /**
         * <p>链接类型，0或不填代表是普通文本，1 代表跳转url，2 代表下载附件，3 代表@员工</p>
         * */
        private int type;
        /**
         * <p>二级标题，建议不超过5个字</p>
         * */
        private String keyname;
        /**
         * <p>二级文本，如果horizontal_content_list.type是2，该字段代表文件名称（要包含文件类型），建议不超过26个字</p>
         * */
        private String value;
        /**
         * <p>链接跳转的url，horizontal_content_list.type是1时必填</p>
         * */
        private String url;
        /**
         * <p>附件的media_id，horizontal_content_list.type是2时必填</p>
         * */
        private String media_id;
        /**
         * <p>被@的成员的userid，horizontal_content_list.type是3时必填</p>
         * */
        private String userid;

    }
    @Data
    public static class JumpList{
        /**
         * <p>跳转链接类型，0或不填代表不是链接，1 代表跳转url，2 代表跳转小程序</p>
         * */
        private int type;
        /**
         * <p>跳转链接的url，jump_list.type是1时必填</p>
         * */
        private String url;
        /**
         * <p>跳转链接样式的文案内容，建议不超过13个字</p>
         * */
        private String title;
        /**
         * <p>跳转链接的小程序的appid，jump_list.type是2时必填</p>
         * */
        private String appid;
        /**
         * <p>跳转链接的小程序的pagepath，jump_list.type是2时选填</p>
         * */
        private String pagepath;
    }
    @Data
    public static class CardAction{
        /**
         * <p>卡片跳转类型，1 代表跳转url，2 代表打开小程序。text_notice模版卡片中该字段取值范围为[1,2]</p>
         * */
        private int type;
        /**
         * <p>跳转事件的url，card_action.type是1时必填</p>
         * */
        private String url;
        /**
         * <p>跳转事件的小程序的appid，card_action.type是2时必填</p>
         * */
        private String appid;
        /**
         * <p>跳转事件的小程序的pagepath，card_action.type是2时选填</p>
         * */
        private String pagepath;
    }
}
